package com.application.model.universidades.quevasaestudiar.manager;

import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.application.model.universidades.quevasaestudiar.entries.Carrera;
import com.application.model.universidades.quevasaestudiar.entries.Facultad;
import com.application.model.universidades.quevasaestudiar.entries.Sede;


public class ManagerUniversidad extends RetrivierWebQueVas{

	private ManagerCarrera 			managerCarrera;	
	public ManagerUniversidad(ManagerQueVasEntity informacion) {
		super(informacion);
		managerCarrera = new ManagerCarrera(informacion);
	}
	@Override
	public void processContent(String data, String parentName) {
		String 		dataLogo = "";
		String 		dataNombre = "";
		String 		dataSede1 = "";
		String 		dataUbicacion = "";
		String 		dataDescripcion = "";
		String 		dataFotos = "";
		String 		dataSede2 = "";
		String 		dataMapa = "";
		String 		dataFacultadesYcarreras = "";
		Pattern     pattern = null;
        Matcher     matcher = null;
        String      regex = null;
    	regex = "<div id=\"logos_detalle\">(.*?)</div>.*?<div id=\"texto_detalle01\">(.*?)</div>.*?<div id=\"texto_detalle02\">(.*?)</div>.*?" 
    			+"<div id=\"texto_detalle03\">(.*?)</div>.*?<div id=\"detalle03\">(.*?)</div>.*?" 
    			+"<div id=\"fotos_detalle\">(.*?)<br.*?" 
    			+"<div id=\"detalle04\">(.*?)</div>.*?" 
    			+"<div id=\"detalle05\">(.*?)<!-- fin resultado_detalle -->.*?<div id=\"detalle08_02\">(.*?)</div>"
    			;
        pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE|Pattern.MULTILINE|Pattern.DOTALL|Pattern.UNICODE_CASE|Pattern.UNIX_LINES);
        matcher = pattern.matcher(data);
        
        while (matcher.find()) {
        	dataLogo = matcher.group(1);
        	dataNombre = matcher.group(2);
        	dataSede1 = matcher.group(3);
        	dataUbicacion = matcher.group(4);
        	dataDescripcion = matcher.group(5);
        	dataFotos = matcher.group(6);
        	dataSede2 = matcher.group(7);
        	dataMapa = matcher.group(8);
        	dataFacultadesYcarreras = matcher.group(9)+"</ol>";
        	
        	agregarInstitucion(dataNombre,dataLogo,dataFotos,dataMapa,dataSede1,dataSede2,dataUbicacion,dataDescripcion,dataFacultadesYcarreras,parentName);
        	
        }
        System.out.println("");
		
	}

	private void agregarFacultadesYcarreras(String nombre,String data) {
		String  		regex = "";
		String 			nombreFacultad = "";
		String 			dataCarreras = "";
		Pattern    		pattern = null;
        Matcher     	matcher = null;
        Facultad		facultad = null;
        List<Carrera>	carreras = null;
        
        regex = "style=\"margin-left:5px; font-size:11px; color:#1191D0;\">\\s?(.*?)</h6><ol>\\s*(.*?)\\s*</ol>";
        pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE|Pattern.MULTILINE|Pattern.DOTALL|Pattern.UNICODE_CASE|Pattern.UNIX_LINES);
        matcher = pattern.matcher(data);
        
        while (matcher.find()) {
        	nombreFacultad = matcher.group(1);
        	dataCarreras = matcher.group(2);
        	facultad = new Facultad();
        	if(nombreFacultad.isEmpty()){
        		nombreFacultad = "Cursos";
        	}
        	facultad.setName(nombreFacultad);
        	carreras = managerCarrera.getCarreras(dataCarreras);
        	facultad.setCarreras(carreras);
        	informacion.addFacultad(nombre,facultad);
        	logger.info("facultad agregada "+facultad.getName());
        }
	}

	

	private void agregarInstitucion(String dataNombre, String dataLogo, String dataFotos, String dataMapa, String dataSede1, String dataSede2, String dataUbicacion, String dataDescripcion, String dataFacultadesYcarreras,String urlCollector) {
		String 			nombre = "";
		String 			tipo = "";
		String 			nivel = "";
		String 			logo;
		List<String> 	fotos = null;
		String 			mapa;
		List<Sede> 	sedes = new LinkedList<Sede>();		
		String 			descripcion;
		
		
		nombre = getNombre(dataNombre);
		
		if(!informacion.contains(nombre)){
			tipo = getTipo(dataNombre);
			nivel = getNivel(dataNombre);
			logo = getLogo(dataLogo);
			fotos = getFotos(dataFotos);
			sedes = getSedes(dataSede1,dataSede2);
			descripcion = getDescripcion(dataDescripcion);
			
			informacion.agregarNuevaInformacion(nombre, tipo,logo, fotos, descripcion,urlCollector);
			informacion.addNivel(nombre, nivel);
			informacion.setSedes(nombre, sedes);
			
			agregarFacultadesYcarreras(nombre,dataFacultadesYcarreras);
			logger.info("institucion agregada "+nombre);
		}
	}

	private String getDescripcion(String data) {		
		String		value = "";
		String      regex = "";
    	regex = "<h3>Descripción</h3> <br />\\s*(.*)";
        
        value = getValue(data, regex, 1);
        if(value.matches(".*Por el momento, no tenemos este dato.*")){
        	value="";
        }
		return value;
	}

	private List<Sede> getSedes(String dataSede1, String dataSede2) {
		List<Sede> sedes = new LinkedList<Sede>();
		Sede	sede = null;
		String  regex = "<p><strong>(.*?)</strong></p>.*?<strong>Dirección: </strong>(.*?)</p>.*?<strong>Provincia: </strong>(.*?)</p>.*?<strong>Teléfono: </strong>(.*?)</p>";
		
		Pattern     pattern = null;
        Matcher     matcher = null;
        pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE|Pattern.MULTILINE|Pattern.DOTALL|Pattern.UNICODE_CASE|Pattern.UNIX_LINES);
        matcher = pattern.matcher(dataSede2);
        
        while (matcher.find()) {
        	sede = new Sede();
        	sede.setNombre(matcher.group(1));        	
        	sede.setPais("Argentina");
        	sede.setProvincia(matcher.group(3));
        	sede.setDireccion(matcher.group(2));
        	sede.setTelefono(matcher.group(4));
        	sedes.add(sede);
        }		
		
    	return sedes;
	}

	

	private List<String> getFotos(String data) {
		List<String> list = null;
		
		String      regex = "";
    	regex = "<img src=\"\\.\\.(.*?)\\\" width=";
        
        list = getValues(data, regex, 1);
		return list;
	}

	private String getLogo(String data) {
		String		value = "";
		String      regex = "";
    	regex = "src=\\\"(.*?)\\\" style=\\\"";
        
        value = getValue(data, regex, 1);
        value="http://www.quevasaestudiar.com"+value;
		return value;
	}

	private String getNivel(String data) {
		String		value = "";
		String      regex = "";
    	regex = "<h2>\\s?(.*?)</h2>";
        
        value = getValue(data, regex, 1);
        if(value.matches(".*niversi.*")){
        	value = "Universidad Carreras";
        }
		return value;
	}

	private String getTipo(String data) {
		String		value = "";
		String      regex = "";
    	regex = "<h2>\\s?(.*?)</h2>";
        
        value = getValue(data, regex, 1);
        if(value.matches(".*rivad.*")){
        	value = "Privado";
        }
		return value;
	}

	private String getNombre(String data) {
		
		String		value = "";
		String      regex = "";
    	regex = "<h1>\\s*(.*?)</h1>";
        
        value = getValue(data, regex, 1);
		return value;
	}

	

	@Override
	public void retrieve() {
		// TODO Auto-generated method stub
		
	}

}
